package com.baijiaoxi.common.model.base.service.interceptor;

import com.baijiaoxi.common.model.base.model.CoreModel;
import com.baijiaoxi.common.model.query.Page;

import java.util.List;

public interface QueryInterceptor<E extends CoreModel> {
    enum InterceptorMethod {
        getOne,
        getCount,
        getList,
        getPage
    }

    /**
     * 查询前的操作
     */
    default void beforeQuery(InterceptorMethod interceptorMethod, E query) {
        beforeQuery(query);
    }

    default void beforeQuery(E query) {
    }

    default void beforePageQuery(Page<E> pageQuery) {
    }

    /**
     * 查询后的操作
     */
    default void afterQuery(E query, E entity) {
    }



    /**
     * 按照查询条件查询单个对象后执行
     *
     * @param entity
     */
    default void afterQueryOne(E query, E entity) {
        afterQuery(query, entity);
    }

    /**
     * 按照查询条件查询无分页列表后执行
     *
     * @param query
     * @param entity
     */
    default void afterQueryList(E query, E entity) {
        afterQuery(query, entity);
    }

    /**
     * 整个填充过程交给插件去实现
     *
     * @param query
     * @param entityList
     */
    default void afterQueryList(E query, List<E> entityList) {
        entityList.stream().forEach(entity -> {
            afterQueryList(query, entity);
        });
    }

    /**
     * 按照查询条件查询分页列表后执行
     *
     * @param query
     * @param page
     */
    default void afterQueryPage(E query, Page<E> page) {
        List<E> list = page.getRecords();
        if (list != null && !list.isEmpty())
            afterQueryList(query, list);
    }


}
